[PowerShell] 再度帰ってきた?Out-GridView
しばたです。
以前PowerShell CoreにクロスプラットフォームなGUIライブラリであるAvaloniaを使ったOut-GridView
コマンドレットが復活した話をしました。
ただ、先日リリースされたPowerShell 7ではWindows PowerShellとの互換性を重視し、基盤となる.NET Core 3.1の互換機能により提供されるWPFを使った従来のOut-GridView
コマンドレットが復活する形となり、Avaloniaを使ったOut-GridView
コマンドレットは事実上のお蔵入りとなっています。
本記事ではOut-GridView
のその後について解説します。
Microsoft.PowerShell.ConsoleGuiTools の登場
PowerShell 7がリリースされて間もなくPowerShell Teamから以下のブログ記事が公開されました。
この記事では、PowerShell 7ではWindows PowerShellとの互換のためにWPFを使ったOut-GridView
コマンドレットを復活させたが、クロスプラットフォーム対応のために新たにMicrosoft.PowerShell.ConsoleGuiToolsというモジュールをリリースしたと発表されています。
Microsoft.PowerShell.ConsoleGuiTools
Avalonia実装のMicrosoft.PowerShell.GraphicalToolsと名前が似てて紛らわしいのですがMicrosoft.PowerShell.ConsoleGuiToolsです。別物です。
(ただしソースは GraphicalTools のリポジトリで一緒に管理されています)
本記事では以後 GraphicalTools と ConsoleGuiTools で表記します。
ConsoleGuiToolsはgui.cs を内部で使いTUIのコマンドレットを提供します。
既存のコマンドレットと名前が衝突するのでOut-GridView
の代わりにOut-ConsoleGridView
という名前のコマンドレットが提供されます。
動作環境
動作環境はWindows、macOS、LinuxのPowerShell Core 6.2以降となります。
TUIのツールですのでGraphicalToolsの様に依存するウィンドウマネージャはありません。
また、モジュールのリリース当初はWindowsで動作しない不具合が合った様ですが今は解消されています。
インストール方法
PowerShell Galleryよりインストール可能です。
Install-Module Microsoft.PowerShell.ConsoleGuiTools
試してみた
今回はPowerShell 7.0.0 on Windowsな環境で試してみます。
GraphicalToolsの時と同様にプロセス情報をグリッド表示してみるとこの様な感じになります。
Get-Process | Out-ConsoleGridView
キー入力でFilterを適用したり、
(↓キーで移動、Apply欄でEnter)
特定のプロセスを選択することも出来ます。
グリッドを終了する際はF9キーを押します。
また、-PassThru
パラメーターを付けて実行した場合
Get-Process | Out-ConsoleGridView -PassThru
グリッドにチェックボックスが増え、戻り値に選ぶプロセスをチェックすることが出来ます。
チェックを付けた状態でグリッドを終了すると選んだプロセス情報だけを返却してくれます。
なかなか良い感じです。
私個人としてはGraphicalToolsよりこちらの方が好みですのでOut-GridView
以外のコマンドレットもじゃんじゃん移植してくれたらうれしいですね。
余談 : gui.cs について
ConsoleGuiToolsについては以上となります。
最後に余談としてgui.csについて軽く触れておきます。
gui.csはMiguel de Icazaさんによる.NET(.NET Core/Mono)のコンソールアプリケーション向けのクロスプラットフォームなUIツールキットです。
Miguelさんと言えばGNOMEの人でありMonoの人でありXamarinの人でもあるのでご存知の方も多いかと思います。gui.csも元々はMonoのMonoCursesというライブラリを発展させたものとなっています。
gui.csの概要に関しては以下をご覧ください。
gui.csはPowerShellに限らず.NETなコンソールアプリケーション開発に使えますので興味のある方は試してみてはいかがでしょうか。